package tools

import (
	"encoding/json"
	"fmt"
	"math/rand"
	"net/url"
	"strings"
	"time"
)

// 一些方便调试的工具

func JsonParse(obj interface{}) string {
	data, _ := json.MarshalIndent(obj, "", " ")

	return string(data)
}

// 是否包含某个数
func AddIfNotExist(slice []uint, num uint) []uint {
	for _, v := range slice {
		if v == num {
			return slice
		}
	}
	return append(slice, num)
}

// 判断是否包含某个数
func ContainsUint(arr []uint, target uint) bool {
	for _, n := range arr {
		if n == target {
			return true
		}
	}
	return false
}

// 判断字符串切片是否含有否个字符串
func ContainsString(s []string, str string) bool {
	for _, v := range s {
		if v == str {
			return true
		}
	}
	return false
}

// 随机生成四位数
func RandValid() string {
	rand.Seed(time.Now().UnixNano())

	// 生成一个四位数，范围从1000到9999
	number := rand.Intn(8999) + 1000
	return fmt.Sprintf("%v", number)
}

// 获取当前YYYYMMDDHHmmss格式时间戳

func GetCurrentTimestamp() string {
	currentTime := time.Now()
	timestamp := currentTime.Format("20060102150405")
	return timestamp
}

func ConvertToJSON(payload url.Values) (string, error) {
	// 将url.Values转换为map[string]interface{}
	data := make(map[string]interface{})
	for key, values := range payload {
		if len(values) == 1 {
			data[key] = values[0]
		} else {
			data[key] = values
		}
	}

	fmt.Println("jjj", data)

	// 将map转换为JSON字符串
	jsonData, err := json.Marshal(data)

	if err != nil {
		return "", err
	}

	return string(jsonData), nil
}

func EscapeQuotes(s string) string {
	// 查找第一个左双引号的索引
	firstQuoteIndex := strings.Index(s, "\"")
	if firstQuoteIndex == -1 {
		// 字符串中没有双引号，直接返回原始字符串
		return s
	}

	// 查找最后一个右双引号的索引
	lastQuoteIndex := strings.LastIndex(s, "\"")
	if lastQuoteIndex == -1 {
		// 字符串中没有双引号，直接返回原始字符串
		return s
	}

	// 提取左引号之前的子串
	prefix := s[:firstQuoteIndex+1]

	// 提取右引号之后的子串
	suffix := s[lastQuoteIndex:]

	// 处理双引号之间的子串
	content := s[firstQuoteIndex+1 : lastQuoteIndex]
	content = strings.ReplaceAll(content, "\"", "\\\"")

	// 拼接处理后的字符串
	result := prefix + content + suffix

	return result
}

func SliceString(str string) string {
	if len(str) <= 200 {
		return str
	} else {
		return str[:199]
	}
}
